/*
给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明：你不能倾斜容器，且 n 的值至少为 2。

 


垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水的最大值为 49。

 

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/container-with-most-water
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

执行用时 :12 ms, 在所有 C++ 提交中击败了98.11%的用户
内存消耗 :7.4 MB, 在所有 C++ 提交中击败了100.00%的用户

复杂度分析：
一次遍历，时间O(n),空间O(1)
*/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    int maxArea(vector<int>& height) {
        int max = 0,tmp,i = 0,j = height.size()-1;
        while (i < j) {
            int h = height[i]>height[j]?height[j]:height[i];    //高度小的那一个
            tmp = h*(j-i);
            max = tmp>max?tmp:max;
            if (height[i] < height[j]) {
                i++;
            }
            else {
                j--;
            }
        }
        return max;
    }
};

int main(int argc, char const* argv[]) {
    Solution s;
    std::vector<int> v = {1,8,6,2,5,4,8,3,7};
    cout<<s.maxArea(v)<<endl;
    //int a = 4,b =5, c = 9;
    //int mm = a>b?(a,c++):(b,c--);	//warning: left operand of comma operator has no effect [-Wunused-value]，左边的无影响
    //cout<<mm<<"  "<<c<<endl;	//实际的输出结果是9  8
    return 0;
}
